/*
 * Albareth - an action roleplaying game.
 * Copyright (C) 2008 Jens Anuth
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 *  02110-1301, USA.
 * 
 * $Id: ActionItem.java 43 2008-05-13 16:52:12Z jens464 $
*/
package albareth.core.entity;


import albareth.core.action.Action;
import albareth.frontend.Tile;

public abstract class ActionItem extends Item implements Cloneable
{
    /** An action associated with this item. */
    private Action _action = null;


    public ActionItem(String name, Tile tile)
    {
        super(name, tile);
    }

    public ActionItem(String name, Tile tile, Action action)
    {
        super(name, tile);
        _action = action;
    }
    
    public Object clone() throws CloneNotSupportedException
    {
        ActionItem clone = (ActionItem)super.clone();
        if (_action != null) {
            clone._action = (Action)_action.clone();
        }
        return clone; 
    }


    public Action getAction()
    {
        return _action;
    }

    public void setAction(Action action)
    {
        _action = action;
    }
    
    public boolean isActivatable()
    {
        return true;
    }
    
    
    public int getCooldownDuration()
    {
        if (_action != null) {
            return _action.getCooldownDuration();
        }
        return 0;
    }

    public long getCooldownDurationLeft()
    {
        if (_action != null) {
            return _action.getCooldownDurationLeft();
        }
        return 0;
    }
    
    public int getCooldownGroup()
    {
        if (_action != null) {
            return _action.getCooldownGroup();
        }
        return -1;

    }
    
    public boolean isReady()
    {
        if (_action != null) {
            return _action.isReady();
        }
        return true;
    }

    public boolean isActivated()
    {
        if (_action != null) {
            return _action.isActivated();
        }
        return true;
    }
    
    public boolean canActivate(Mobile user)
    {
        if (_action != null) {
            return _action.canActivate(user);
        }
        return true;
    }
    


}
